package com.atguigu.singleton.type2;

/**
 * @author ccc
 * @create 2020-07-15 19:44
 */
public class SingletonTest02 {
    public static void main(String[] args) {
//        //测试
        Singleton instance = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();
        System.out.println(instance == instance2);
        System.out.println("instance.hashCode=" + instance.hashCode());
        System.out.println("instance2.hashCode=" + instance2.hashCode());
    }
}

//饿汉式（静态代码块）
//优缺点说明
//1、优点：这种写法比较简单，就是在类装载的时候就完成实例化，避免了线程同步问题
//2、缺点：在类加载的时候就完成实例化，没有达到lazy loading的效果。如果从始至终从未使用过这个实例
//         则会造成内存的浪费
//3、结论：这种单例模式可用，可能造成内存浪费
class Singleton{

    //1、构造器私有化
    private Singleton(){

    }
    //静态代码块中，创建单例对象
    static{
        instance = new Singleton();
    }

    //2、本类内部创建实例
    private static Singleton instance;

    //3、提供公共方法获取Instance
    public static Singleton getInstance(){
        return instance;
    }
}